<?php

/**
 * Базовая реализаци Zend_Controller_Action
 */

require_once('Xajax/xajax.inc.php');

class FRM_Controller_Action_Abstract extends Zend_Controller_Action
{
	/**
	 * Темплей по умолчанию
	 *
	 * @var string
	 */
	protected $defaultTemplate;

	/**
	 * Ссылка на обьеки xajax
	 *
	 * @var xajax
	 */
	protected $_xajax = null;

	/**
	 * Использовать ли аякс в котролере
	 *
	 * @var bool
	 */
	protected $_useXajax = false;

	/**
	 * Префыкс для методов, которые автоматически регистрируются как аякс функции
	 *
	 * @var string
	 */
	private static $ajaxFuncPrefix = 'ajax';

	/**
     * Название класса в которм модель, которая относится к даному контролеру
     *
     * @var string
     */
	protected $_modelClass;

	/**
     * Модель, которая относится к даному контролеру
     *
     * @var FRM_Db_Table
     */
	protected $_model;

	/**
     * Ссылка на адптер по умолчанию
     *
     * @var Zend_Db_Adapter_Abstract
     */
	protected $_adapter;
	
	/**
	 * Enter description here...
	 *
	 * @var Zend_Auth
	 */
	public static $currentAuth;

	/**
	 * Инициализация
	 *
	 */
	public function init()
	{
		//Проверяем не создана ли модель до того
		if(!is_null($this->_modelClass)){
			//Создаем єкземпляр модели и присваюем ссылку на адаптер по умолчанию
			if (class_exists($this->_modelClass)){
				$this->_model = new $this->_modelClass;
				$this->_adapter = $this->_model->getAdapter();
			}
		}
		
		//Передача параметров в шаблон
		$request = $this->_request->getParams();
		$request['uri'] = $_SERVER['REQUEST_URI'];
		$this->view->request = $request;
//		$this->view->request = $this->_request->getParams();

		//Передача URI в шаблон
		$uri = new FRM_Tools_Uri();
		$this->view->actionUri = $uri->toString();

		//Передача текущего поста в шаблон
		$this->view->post=array_merge($_POST, $this->_request->getParams());

		//передача templateUri в шаблон
		$this->view->templateUri = '/application/views/scripts/';

		//Назначение темлейта по умолчаию
		$this->view->setTemplate($this->defaultTemplate);

		//Инициализируем аякс если надо
		if($this->_useXajax)
		$this->initXajax();
		parent::init();
	}

	/**
	 * Инициализация Xajax
	 *
	 */
	public function initXajax()
	{
		//Если не инициализовано
		if(!$this->_xajax)
		{
			//Создаем экземпляр
			$this->_xajax = new xajax();

			//Регистрируем фукнции
			$this->registerFunctions();

			//Указываем путь яваскрипт библиотек
			$this->view->xajaxJavascript = $this->_xajax->getJavascript($this->view->HTTP . "/js/");

			//Процесим
			$this->_xajax->processRequest();
		}
	}

	/**
	 * Авторегистрация аяксовых методов
	 *
	 */
	protected function registerFunctions()
	{
		//Выбераем список методов
		$oRefl = new ReflectionClass(get_class($this));
		if (is_object($oRefl))
		{
			$methods = $oRefl->getMethods();
		}

		//Перебираем методы и если есть префикс, то регистрируем
		foreach ($methods as $m)
		{
			$p = self::$ajaxFuncPrefix;
			if (preg_match("/^{$p}[A-Z]/", $m->getName()))
			{
				$m2 = preg_replace("/^{$p}([A-Z])/e", "strtolower('$1')", $m->getName());
				$this->_xajax->registerFunction(array($m2, &$this, $m->getName()));
			}
		}
	}

}